Autogenerated HTML docs for v1.7.12-503-g59767 
diff --git a/RelNotes/1.8.0.txt b/RelNotes/1.8.0.txt index 90c4f47..c7bb503 100644 --- a/RelNotes/1.8.0.txt +++ b/RelNotes/1.8.0.txt 
@@ -116,6 +116,35 @@  maintenance track are contained in this release (see release notes  to them for details).   + * "git blame MAKEFILE" run in a history that has "Makefile" but not + "MAKEFILE" should say "No such file MAKEFILE in HEAD", but got + confused on a case insensitive filesystem and failed to do so. + (merge 9aeaab6 jc/maint-blame-no-such-path later to maint). + + * Even during a conflicted merge, "git blame $path" always meant to + blame uncommitted changes to the "working tree" version; make it + more useful by showing cleanly merged parts as coming from the other + branch that is being merged. + (merge 9aeaab6 jc/maint-blame-no-such-path later to maint). + + * Documentation talked about "first line of commit log" when it meant + the title of the commit. The description was clarified by defining + how the title is decided and rewording the casual mention of "first + line" to "title". + (merge 52ffe99 jw/doc-commit-title later to maint). + + * The attribute system may be asked for a path that itself or its + leading directories no longer exists in the working tree. Failure + to open per-directory .gitattributes with error status other than + ENOENT and ENOTDIR are diagnosed. + (merge 8e950da jk/config-warn-on-inaccessible-paths later to maint). + + * Earlier we made the diffstat summary line that shows the number of + lines added/deleted localizable, but it was found irritating having + to see them in various languages on a list whose discussion language + is English. + (merge 218adaa nd/maint-diffstat-summary later to maint). +  * "git fetch --all", when passed "--no-tags", did not honor the  "--no-tags" option while fetching from individual remotes (the same  issue existed with "--tags", but combination "--all --tags" makes 
diff --git a/config.txt b/config.txt index 6416cae..11f320b 100644 --- a/config.txt +++ b/config.txt 
@@ -559,8 +559,9 @@  * `space-before-tab` treats a space character that appears immediately  before a tab character in the initial indent part of the line as an  error (enabled by default). -* `indent-with-non-tab` treats a line that is indented with 8 or more - space characters as an error (not enabled by default). +* `indent-with-non-tab` treats a line that is indented with space + characters instead of the equivalent tabs as an error (not enabled by + default).  * `tab-in-indent` treats a tab character in the initial indent part of  the line as an error (not enabled by default).  * `blank-at-eof` treats blank lines added at the end of file as an error 
diff --git a/git-commit.html b/git-commit.html index fcbe0e1..69aae05 100644 --- a/git-commit.html +++ b/git-commit.html 
@@ -1226,8 +1226,10 @@  <div class="paragraph"><p>Though not required, it&#8217;s a good idea to begin the commit message   with a single short (less than 50 character) line summarizing the   change, followed by a blank line and then a more thorough description.  -Tools that turn commits into email, for example, use the first line  -on the Subject: line and the rest of the commit in the body.</p></div>  +The text up to the first blank line in a commit message is treated  +as the commit title, and that title is used throughout git.  +For example, <a href="git-format-patch.html">git-format-patch(1)</a> turns a commit into email, and it uses  +the title on the Subject line and the rest of the commit in the body.</p></div>   <div class="paragraph"><p>At the core level, git is character encoding agnostic.</p></div>   <div class="ulist"><ul>   <li>  @@ -1347,7 +1349,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2012-07-24 15:05:00 PDT  +Last updated 2012-09-17 16:55:59 PDT   </div>   </div>   </body>  
diff --git a/git-commit.txt b/git-commit.txt index 4622297..9594ac8 100644 --- a/git-commit.txt +++ b/git-commit.txt 
@@ -389,8 +389,10 @@  Though not required, it's a good idea to begin the commit message  with a single short (less than 50 character) line summarizing the  change, followed by a blank line and then a more thorough description. -Tools that turn commits into email, for example, use the first line -on the Subject: line and the rest of the commit in the body. +The text up to the first blank line in a commit message is treated +as the commit title, and that title is used throughout git. +For example, linkgit:git-format-patch[1] turns a commit into email, and it uses +the title on the Subject line and the rest of the commit in the body.    include::i18n.txt[]   
diff --git a/git-config.html b/git-config.html index d0fdfe1..7b9cd4b 100644 --- a/git-config.html +++ b/git-config.html 
@@ -1842,8 +1842,9 @@  </li>   <li>   <p>  -<tt>indent-with-non-tab</tt> treats a line that is indented with 8 or more  - space characters as an error (not enabled by default).  +<tt>indent-with-non-tab</tt> treats a line that is indented with space  + characters instead of the equivalent tabs as an error (not enabled by  + default).   </p>   </li>   <li>  
diff --git a/git-for-each-ref.html b/git-for-each-ref.html index f708b02..e0a91a2 100644 --- a/git-for-each-ref.html +++ b/git-for-each-ref.html 
@@ -733,9 +733,10 @@  <tt>committer</tt>, and <tt>tagger</tt>) can be suffixed with <tt>name</tt>, <tt>email</tt>,   and <tt>date</tt> to extract the named component.</p></div>   <div class="paragraph"><p>The complete message in a commit and tag object is <tt>contents</tt>.  -Its first line is <tt>contents:subject</tt>, the remaining lines  -are <tt>contents:body</tt> and the optional GPG signature  -is <tt>contents:signature</tt>.</p></div>  +Its first line is <tt>contents:subject</tt>, where subject is the concatenation  +of all lines of the commit message up to the first blank line. The next  +line is <em>contents:body</em>, where body is all of the lines after the first  +blank line. Finally, the optional GPG signature is <tt>contents:signature</tt>.</p></div>   <div class="paragraph"><p>For sorting purposes, fields with numeric values sort in numeric   order (<tt>objectsize</tt>, <tt>authordate</tt>, <tt>committerdate</tt>, <tt>taggerdate</tt>).   All other fields are used to sort in their byte-value order.</p></div>  @@ -846,7 +847,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-11-15 13:45:02 PDT  +Last updated 2012-09-17 16:55:59 PDT   </div>   </div>   </body>  
diff --git a/git-for-each-ref.txt b/git-for-each-ref.txt index c872b88..db55a4e 100644 --- a/git-for-each-ref.txt +++ b/git-for-each-ref.txt 
@@ -102,9 +102,10 @@  and `date` to extract the named component.    The complete message in a commit and tag object is `contents`. -Its first line is `contents:subject`, the remaining lines -are `contents:body` and the optional GPG signature -is `contents:signature`. +Its first line is `contents:subject`, where subject is the concatenation +of all lines of the commit message up to the first blank line. The next +line is 'contents:body', where body is all of the lines after the first +blank line. Finally, the optional GPG signature is `contents:signature`.    For sorting purposes, fields with numeric values sort in numeric  order (`objectsize`, `authordate`, `committerdate`, `taggerdate`). 
diff --git a/git-format-patch.html b/git-format-patch.html index 81fa376..d1d06f7 100644 --- a/git-format-patch.html +++ b/git-format-patch.html 
@@ -636,10 +636,12 @@  output, unless the <tt>--stdout</tt> option is specified.</p></div>   <div class="paragraph"><p>If <tt>-o</tt> is specified, output files are created in &lt;dir&gt;. Otherwise   they are created in the current working directory.</p></div>  -<div class="paragraph"><p>By default, the subject of a single patch is "[PATCH] First Line" and  -the subject when multiple patches are output is "[PATCH n/m] First  -Line". To force 1/1 to be added for a single patch, use <tt>-n</tt>. To omit  -patch numbers from the subject, use <tt>-N</tt>.</p></div>  +<div class="paragraph"><p>By default, the subject of a single patch is "[PATCH] " followed by  +the concatenation of lines from the commit message up to the first blank  +line (see the DISCUSSION section of <a href="git-commit.html">git-commit(1)</a>).</p></div>  +<div class="paragraph"><p>When multiple patches are output, the subject prefix will instead be  +"[PATCH n/m] ". To force 1/1 to be added for a single patch, use <tt>-n</tt>.  +To omit patch numbers from the subject, use <tt>-N</tt>.</p></div>   <div class="paragraph"><p>If given <tt>--thread</tt>, <tt>git-format-patch</tt> will generate <tt>In-Reply-To</tt> and   <tt>References</tt> headers to make the second and subsequent patch mails appear   as replies to the first mail; this also generates a <tt>Message-Id</tt> header to  @@ -1769,7 +1771,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2012-05-02 15:00:44 PDT  +Last updated 2012-09-17 16:55:59 PDT   </div>   </div>   </body>  
diff --git a/git-format-patch.txt b/git-format-patch.txt index 04c7346..6d43f56 100644 --- a/git-format-patch.txt +++ b/git-format-patch.txt 
@@ -58,10 +58,13 @@  If `-o` is specified, output files are created in <dir>. Otherwise  they are created in the current working directory.   -By default, the subject of a single patch is "[PATCH] First Line" and -the subject when multiple patches are output is "[PATCH n/m] First -Line". To force 1/1 to be added for a single patch, use `-n`. To omit -patch numbers from the subject, use `-N`. +By default, the subject of a single patch is "[PATCH] " followed by +the concatenation of lines from the commit message up to the first blank +line (see the DISCUSSION section of linkgit:git-commit[1]). + +When multiple patches are output, the subject prefix will instead be +"[PATCH n/m] ". To force 1/1 to be added for a single patch, use `-n`. +To omit patch numbers from the subject, use `-N`.    If given `--thread`, `git-format-patch` will generate `In-Reply-To` and  `References` headers to make the second and subsequent patch mails appear 
diff --git a/git-shortlog.html b/git-shortlog.html index 236a546..5bb5ef4 100644 --- a/git-shortlog.html +++ b/git-shortlog.html 
@@ -591,8 +591,7 @@  <h2 id="_description">DESCRIPTION</h2>   <div class="sectionbody">   <div class="paragraph"><p>Summarizes <em>git log</em> output in a format suitable for inclusion  -in release announcements. Each commit will be grouped by author and  -the first line of the commit message will be shown.</p></div>  +in release announcements. Each commit will be grouped by author and title.</p></div>   <div class="paragraph"><p>Additionally, "[PATCH]" will be stripped from the commit description.</p></div>   <div class="paragraph"><p>If no revisions are passed on the command line and either standard input   is not a terminal or there is no current branch, <em>git shortlog</em> will  @@ -760,7 +759,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2012-05-02 15:00:44 PDT  +Last updated 2012-09-17 16:55:59 PDT   </div>   </div>   </body>  
diff --git a/git-shortlog.txt b/git-shortlog.txt index 01d8417..afeb4cd 100644 --- a/git-shortlog.txt +++ b/git-shortlog.txt 
@@ -14,8 +14,7 @@  DESCRIPTION  -----------  Summarizes 'git log' output in a format suitable for inclusion -in release announcements. Each commit will be grouped by author and -the first line of the commit message will be shown. +in release announcements. Each commit will be grouped by author and title.    Additionally, "[PATCH]" will be stripped from the commit description.   
diff --git a/gitcore-tutorial.html b/gitcore-tutorial.html index 171b858..281b363 100644 --- a/gitcore-tutorial.html +++ b/gitcore-tutorial.html 
@@ -1481,12 +1481,11 @@  * [master^] Some fun.</tt></pre>   </div></div>   <div class="paragraph"><p>The first two lines indicate that it is showing the two branches  -and the first line of the commit log message from their  -top-of-the-tree commits, you are currently on <tt>master</tt> branch  -(notice the asterisk <tt>*</tt> character), and the first column for  -the later output lines is used to show commits contained in the  +with the titles of their top-of-the-tree commits, you are currently on  +<tt>master</tt> branch (notice the asterisk <tt>*</tt> character), and the first  +column for the later output lines is used to show commits contained in the   <tt>master</tt> branch, and the second column for the <tt>mybranch</tt>  -branch. Three commits are shown along with their log messages.  +branch. Three commits are shown along with their titles.   All of them have non blank characters in the first column (<tt>*</tt>   shows an ordinary commit on the current branch, <tt>-</tt> is a merge commit), which   means they are now part of the <tt>master</tt> branch. Only the "Some  @@ -2311,7 +2310,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2012-05-02 15:00:44 PDT  +Last updated 2012-09-17 16:55:59 PDT   </div>   </div>   </body>  
diff --git a/gitcore-tutorial.txt b/gitcore-tutorial.txt index 9d89336..5325c5a 100644 --- a/gitcore-tutorial.txt +++ b/gitcore-tutorial.txt 
@@ -956,12 +956,11 @@  ------------------------------------------------    The first two lines indicate that it is showing the two branches -and the first line of the commit log message from their -top-of-the-tree commits, you are currently on `master` branch -(notice the asterisk `*` character), and the first column for -the later output lines is used to show commits contained in the +with the titles of their top-of-the-tree commits, you are currently on +`master` branch (notice the asterisk `*` character), and the first +column for the later output lines is used to show commits contained in the  `master` branch, and the second column for the `mybranch` -branch. Three commits are shown along with their log messages. +branch. Three commits are shown along with their titles.  All of them have non blank characters in the first column (`*`  shows an ordinary commit on the current branch, `-` is a merge commit), which  means they are now part of the `master` branch. Only the "Some 
diff --git a/gittutorial.html b/gittutorial.html index 8483331..8b7e1b8 100644 --- a/gittutorial.html +++ b/gittutorial.html 
@@ -695,9 +695,11 @@  <div class="paragraph"><p>A note on commit messages: Though not required, it&#8217;s a good idea to   begin the commit message with a single short (less than 50 character)   line summarizing the change, followed by a blank line and then a more  -thorough description. Tools that turn commits into email, for  -example, use the first line on the Subject: line and the rest of the  -commit in the body.</p></div>  +thorough description. The text up to the first blank line in a commit  +message is treated as the commit title, and that title is used  +throughout git. For example, <a href="git-format-patch.html">git-format-patch(1)</a> turns a  +commit into email, and it uses the title on the Subject line and the  +rest of the commit in the body.</p></div>   </div>   <h2 id="_git_tracks_content_not_files">Git tracks content not files</h2>   <div class="sectionbody">  @@ -1183,7 +1185,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-11-15 13:45:02 PDT  +Last updated 2012-09-17 16:55:59 PDT   </div>   </div>   </body>  
diff --git a/gittutorial.txt b/gittutorial.txt index dee0505..f1cb6f3 100644 --- a/gittutorial.txt +++ b/gittutorial.txt 
@@ -139,9 +139,11 @@  A note on commit messages: Though not required, it's a good idea to  begin the commit message with a single short (less than 50 character)  line summarizing the change, followed by a blank line and then a more -thorough description. Tools that turn commits into email, for -example, use the first line on the Subject: line and the rest of the -commit in the body. +thorough description. The text up to the first blank line in a commit +message is treated as the commit title, and that title is used +throughout git. For example, linkgit:git-format-patch[1] turns a +commit into email, and it uses the title on the Subject line and the +rest of the commit in the body.    Git tracks content not files  ---------------------------- 
diff --git a/technical/api-string-list.html b/technical/api-string-list.html index d45da85..8bb9610 100644 --- a/technical/api-string-list.html +++ b/technical/api-string-list.html 
@@ -580,8 +580,9 @@  </li>   <li>   <p>  -Adds new items to the list, using <tt>string_list_append</tt> or  - <tt>string_list_insert</tt>.  +Adds new items to the list, using <tt>string_list_append</tt>,  + <tt>string_list_append_nodup</tt>, <tt>string_list_insert</tt>,  + <tt>string_list_split</tt>, and/or <tt>string_list_split_in_place</tt>.   </p>   </li>   <li>  @@ -598,12 +599,24 @@  </li>   <li>   <p>  +Can remove duplicate items from a sorted list using  + <tt>string_list_remove_duplicates</tt>.  +</p>  +</li>  +<li>  +<p>   Can remove individual items of an unsorted list using   <tt>unsorted_string_list_delete_item</tt>.   </p>   </li>   <li>   <p>  +Can remove items not matching a criterion from a sorted or unsorted  + list using <tt>filter_string_list</tt>.  +</p>  +</li>  +<li>  +<p>   Finally it should free the list using <tt>string_list_clear</tt>.   </p>   </li>  @@ -611,10 +624,9 @@  <div class="paragraph"><p>Example:</p></div>   <div class="listingblock">   <div class="content">  -<pre><tt>struct string_list list;  +<pre><tt>struct string_list list = STRING_LIST_INIT_NODUP;   int i;    -memset(&amp;list, 0, sizeof(struct string_list));   string_list_append(&amp;list, "foo");   string_list_append(&amp;list, "bar");   for (i = 0; i &lt; list.nr; i++)  @@ -645,6 +657,30 @@  </p>   <div class="dlist"><dl>   <dt class="hdlist1">  +<tt>filter_string_list</tt>  +</dt>  +<dd>  +<p>  + Apply a function to each item in a list, retaining only the  + items for which the function returns true. If free_util is  + true, call free() on the util members of any items that have  + to be deleted. Preserve the order of the items that are  + retained.  +</p>  +</dd>  +<dt class="hdlist1">  +<tt>string_list_longest_prefix</tt>  +</dt>  +<dd>  +<p>  + Return the longest string within a string_list that is a  + prefix (in the sense of prefixcmp()) of the specified string,  + or NULL if no such prefix exists. This function does not  + require the string_list to be sorted (it does a linear  + search).  +</p>  +</dd>  +<dt class="hdlist1">   <tt>print_string_list</tt>   </dt>   <dd>  @@ -704,6 +740,16 @@  string_list_item. If the string is not found, NULL is returned.   </p>   </dd>  +<dt class="hdlist1">  +<tt>string_list_remove_duplicates</tt>  +</dt>  +<dd>  +<p>  + Remove all but the first of consecutive entries that have the  + same string value. If free_util is true, call free() on the  + util members of any items that have to be deleted.  +</p>  +</dd>   </dl></div>   </li>   <li>  @@ -716,7 +762,22 @@  </dt>   <dd>   <p>  - Append a new string to the end of the string_list.  + Append a new string to the end of the string_list. If  + <tt>strdup_string</tt> is set, then the string argument is copied;  + otherwise the new <tt>string_list_entry</tt> refers to the input  + string.  +</p>  +</dd>  +<dt class="hdlist1">  +<tt>string_list_append_nodup</tt>  +</dt>  +<dd>  +<p>  + Append a new string to the end of the string_list. The new  + <tt>string_list_entry</tt> always refers to the input string, even if  + <tt>strdup_string</tt> is set. This function can be used to hand  + ownership of a malloc()ed string to a <tt>string_list</tt> that has  + <tt>strdup_string</tt> set.   </p>   </dd>   <dt class="hdlist1">  @@ -756,6 +817,29 @@  items should be freed or not.   </p>   </dd>  +<dt class="hdlist1">  +<tt>string_list_split</tt>  +</dt>  +<dt class="hdlist1">  +<tt>string_list_split_in_place</tt>  +</dt>  +<dd>  +<p>  + Split a string into substrings on a delimiter character and  + append the substrings to a <tt>string_list</tt>. If <tt>maxsplit</tt> is  + non-negative, then split at most <tt>maxsplit</tt> times. Return the  + number of substrings appended to the list.  +</p>  +<div class="paragraph"><p><tt>string_list_split</tt> requires a <tt>string_list</tt> that has <tt>strdup_strings</tt>  +set to true; it leaves the input string untouched and makes copies of  +the substrings in newly-allocated memory.  +<tt>string_list_split_in_place</tt> requires a <tt>string_list</tt> that has  +<tt>strdup_strings</tt> set to false; it splits the input string in place,  +overwriting the delimiter characters with NULs and creating new  +string_list_items that point into the original string (the original  +string must therefore not be modified or freed while the <tt>string_list</tt>  +is in use).</p></div>  +</dd>   </dl></div>   </li>   </ul></div>  @@ -808,7 +892,7 @@  <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2012-03-31 11:18:40 PDT  +Last updated 2012-09-17 16:55:59 PDT   </div>   </div>   </body>  
diff --git a/technical/api-string-list.txt b/technical/api-string-list.txt index 5a0c14f..155ac8c 100644 --- a/technical/api-string-list.txt +++ b/technical/api-string-list.txt 
@@ -20,8 +20,9 @@  member (you need this if you add things later) and you should set the  `nr` and `alloc` members in that case, too.   -. Adds new items to the list, using `string_list_append` or - `string_list_insert`. +. Adds new items to the list, using `string_list_append`, + `string_list_append_nodup`, `string_list_insert`, + `string_list_split`, and/or `string_list_split_in_place`.    . Can check if a string is in the list using `string_list_has_string` or  `unsorted_string_list_has_string` and get it from the list using @@ -29,18 +30,23 @@    . Can sort an unsorted list using `sort_string_list`.   +. Can remove duplicate items from a sorted list using + `string_list_remove_duplicates`. +  . Can remove individual items of an unsorted list using  `unsorted_string_list_delete_item`.   +. Can remove items not matching a criterion from a sorted or unsorted + list using `filter_string_list`. +  . Finally it should free the list using `string_list_clear`.    Example:    ---- -struct string_list list; +struct string_list list = STRING_LIST_INIT_NODUP;  int i;   -memset(&list, 0, sizeof(struct string_list));  string_list_append(&list, "foo");  string_list_append(&list, "bar");  for (i = 0; i < list.nr; i++) @@ -60,6 +66,22 @@    * General ones (works with sorted and unsorted lists as well)   +`filter_string_list`:: + +	Apply a function to each item in a list, retaining only the +	items for which the function returns true. If free_util is +	true, call free() on the util members of any items that have +	to be deleted. Preserve the order of the items that are +	retained. + +`string_list_longest_prefix`:: + +	Return the longest string within a string_list that is a +	prefix (in the sense of prefixcmp()) of the specified string, +	or NULL if no such prefix exists. This function does not +	require the string_list to be sorted (it does a linear +	search). +  `print_string_list`::   	Dump a string_list to stdout, useful mainly for debugging purposes. It @@ -96,11 +118,28 @@ 	Look up a given string in the string_list, returning the containing 	string_list_item. If the string is not found, NULL is returned.   +`string_list_remove_duplicates`:: + +	Remove all but the first of consecutive entries that have the +	same string value. If free_util is true, call free() on the +	util members of any items that have to be deleted. +  * Functions for unsorted lists only    `string_list_append`::   -	Append a new string to the end of the string_list. +	Append a new string to the end of the string_list. If +	`strdup_string` is set, then the string argument is copied; +	otherwise the new `string_list_entry` refers to the input +	string. + +`string_list_append_nodup`:: + +	Append a new string to the end of the string_list. The new +	`string_list_entry` always refers to the input string, even if +	`strdup_string` is set. This function can be used to hand +	ownership of a malloc()ed string to a `string_list` that has +	`strdup_string` set.    `sort_string_list`::   @@ -124,6 +163,25 @@ 	is set. The third parameter controls if the `util` pointer of the 	items should be freed or not.   +`string_list_split`:: +`string_list_split_in_place`:: + +	Split a string into substrings on a delimiter character and +	append the substrings to a `string_list`. If `maxsplit` is +	non-negative, then split at most `maxsplit` times. Return the +	number of substrings appended to the list. ++ +`string_list_split` requires a `string_list` that has `strdup_strings` +set to true; it leaves the input string untouched and makes copies of +the substrings in newly-allocated memory. +`string_list_split_in_place` requires a `string_list` that has +`strdup_strings` set to false; it splits the input string in place, +overwriting the delimiter characters with NULs and creating new +string_list_items that point into the original string (the original +string must therefore not be modified or freed while the `string_list` +is in use). + +  Data structures  ---------------   
diff --git a/user-manual.html b/user-manual.html index 8ef9954..b3d76ae 100644 --- a/user-manual.html +++ b/user-manual.html 
@@ -1,5 +1,5 @@  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> -<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User’s Manual (for version 1.5.3 or newer)</title><link rel="stylesheet" href="docbook-xsl.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book" title="Git User’s Manual (for version 1.5.3 or newer)"><div class="titlepage"><div><div><h1 class="title"><a name="id381578"></a>Git User’s Manual (for version 1.5.3 or newer)</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#id382136"></a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches">1. Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability">Understanding history: commits, parents, and reachability</a></span></dt><dt><span class="section"><a href="#history-diagrams">Understanding history: History diagrams</a></span></dt><dt><span class="section"><a href="#what-is-a-branch">Understanding history: What is a branch?</a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history">2. Exploring git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch">Counting the number of commits on a branch</a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches">Check whether two branches point at the same history</a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants">Find first tagged version including a given fix</a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch">Showing commits unique to a given branch</a></span></dt><dt><span class="section"><a href="#making-a-release">Creating a changelog and tarball for a software release</a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content">Finding commits referencing a file with given content</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git">3. Developing with git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution">Getting conflict-resolution help during a merge</a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit">Fixing a mistake with a new commit</a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history">Fixing a mistake by rewriting history</a></span></dt><dt><span class="section"><a href="#checkout-of-path">Checking out an old version of a file</a></span></dt><dt><span class="section"><a href="#interrupted-work">Temporarily setting aside work in progress</a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption">Checking the repository for corruption</a></span></dt><dt><span class="section"><a href="#recovering-lost-changes">Recovering lost changes</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development">4. Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public git repositories</a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository">Setting up a public repository</a></span></dt><dt><span class="section"><a href="#exporting-via-git">Exporting a git repository via the git protocol</a></span></dt><dt><span class="section"><a href="#exporting-via-http">Exporting a git repository via http</a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository">Pushing changes to a public repository</a></span></dt><dt><span class="section"><a href="#forcing-push">What to do when a push fails</a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository">Setting up a shared repository</a></span></dt><dt><span class="section"><a href="#setting-up-gitweb">Allowing web browsing of a repository</a></span></dt></dl></dd><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches">Maintaining topic branches for a Linux subsystem maintainer</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history">5. Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management">6. Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts">7. Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object">Commit Object</a></span></dt><dt><span class="section"><a href="#tree-object">Tree Object</a></span></dt><dt><span class="section"><a href="#blob-object">Blob Object</a></span></dt><dt><span class="section"><a href="#trust">Trust</a></span></dt><dt><span class="section"><a href="#tag-object">Tag Object</a></span></dt><dt><span class="section"><a href="#pack-files">How git stores objects efficiently: pack files</a></span></dt><dt><span class="section"><a href="#dangling-objects">Dangling objects</a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption">Recovering from repository corruption</a></span></dt></dl></dd><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules">8. Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#_pitfalls_with_submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations">9. Low-level git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index">working directory → index</a></span></dt><dt><span class="section"><a href="#index-to-object-database">index → object database</a></span></dt><dt><span class="section"><a href="#object-database-to-index">object database → index</a></span></dt><dt><span class="section"><a href="#index-to-working-directory">index → working directory</a></span></dt><dt><span class="section"><a href="#tying-it-all-together">Tying it all together</a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git">10. Hacking git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary">11. Git Glossary</a></span></dt><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a name="id382136"></a></h2></div></div></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Git User’s Manual (for version 1.5.3 or newer)</title><link rel="stylesheet" href="docbook-xsl.css" type="text/css"><meta name="generator" content="DocBook XSL Stylesheets V1.75.2"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div lang="en" class="book" title="Git User’s Manual (for version 1.5.3 or newer)"><div class="titlepage"><div><div><h1 class="title"><a name="id501934"></a>Git User’s Manual (for version 1.5.3 or newer)</h1></div></div><hr></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="preface"><a href="#id501945"></a></span></dt><dt><span class="chapter"><a href="#repositories-and-branches">1. Repositories and Branches</a></span></dt><dd><dl><dt><span class="section"><a href="#how-to-get-a-git-repository">How to get a git repository</a></span></dt><dt><span class="section"><a href="#how-to-check-out">How to check out a different version of a project</a></span></dt><dt><span class="section"><a href="#understanding-commits">Understanding History: Commits</a></span></dt><dd><dl><dt><span class="section"><a href="#understanding-reachability">Understanding history: commits, parents, and reachability</a></span></dt><dt><span class="section"><a href="#history-diagrams">Understanding history: History diagrams</a></span></dt><dt><span class="section"><a href="#what-is-a-branch">Understanding history: What is a branch?</a></span></dt></dl></dd><dt><span class="section"><a href="#manipulating-branches">Manipulating branches</a></span></dt><dt><span class="section"><a href="#detached-head">Examining an old version without creating a new branch</a></span></dt><dt><span class="section"><a href="#examining-remote-branches">Examining branches from a remote repository</a></span></dt><dt><span class="section"><a href="#how-git-stores-references">Naming branches, tags, and other references</a></span></dt><dt><span class="section"><a href="#Updating-a-repository-With-git-fetch">Updating a repository with git fetch</a></span></dt><dt><span class="section"><a href="#fetching-branches">Fetching branches from other repositories</a></span></dt></dl></dd><dt><span class="chapter"><a href="#exploring-git-history">2. Exploring git history</a></span></dt><dd><dl><dt><span class="section"><a href="#using-bisect">How to use bisect to find a regression</a></span></dt><dt><span class="section"><a href="#naming-commits">Naming commits</a></span></dt><dt><span class="section"><a href="#creating-tags">Creating tags</a></span></dt><dt><span class="section"><a href="#browsing-revisions">Browsing revisions</a></span></dt><dt><span class="section"><a href="#generating-diffs">Generating diffs</a></span></dt><dt><span class="section"><a href="#viewing-old-file-versions">Viewing old file versions</a></span></dt><dt><span class="section"><a href="#history-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#counting-commits-on-a-branch">Counting the number of commits on a branch</a></span></dt><dt><span class="section"><a href="#checking-for-equal-branches">Check whether two branches point at the same history</a></span></dt><dt><span class="section"><a href="#finding-tagged-descendants">Find first tagged version including a given fix</a></span></dt><dt><span class="section"><a href="#showing-commits-unique-to-a-branch">Showing commits unique to a given branch</a></span></dt><dt><span class="section"><a href="#making-a-release">Creating a changelog and tarball for a software release</a></span></dt><dt><span class="section"><a href="#Finding-commits-With-given-Content">Finding commits referencing a file with given content</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#Developing-With-git">3. Developing with git</a></span></dt><dd><dl><dt><span class="section"><a href="#telling-git-your-name">Telling git your name</a></span></dt><dt><span class="section"><a href="#creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#how-to-make-a-commit">How to make a commit</a></span></dt><dt><span class="section"><a href="#creating-good-commit-messages">Creating good commit messages</a></span></dt><dt><span class="section"><a href="#ignoring-files">Ignoring files</a></span></dt><dt><span class="section"><a href="#how-to-merge">How to merge</a></span></dt><dt><span class="section"><a href="#resolving-a-merge">Resolving a merge</a></span></dt><dd><dl><dt><span class="section"><a href="#conflict-resolution">Getting conflict-resolution help during a merge</a></span></dt></dl></dd><dt><span class="section"><a href="#undoing-a-merge">Undoing a merge</a></span></dt><dt><span class="section"><a href="#fast-forwards">Fast-forward merges</a></span></dt><dt><span class="section"><a href="#fixing-mistakes">Fixing mistakes</a></span></dt><dd><dl><dt><span class="section"><a href="#reverting-a-commit">Fixing a mistake with a new commit</a></span></dt><dt><span class="section"><a href="#fixing-a-mistake-by-rewriting-history">Fixing a mistake by rewriting history</a></span></dt><dt><span class="section"><a href="#checkout-of-path">Checking out an old version of a file</a></span></dt><dt><span class="section"><a href="#interrupted-work">Temporarily setting aside work in progress</a></span></dt></dl></dd><dt><span class="section"><a href="#ensuring-good-performance">Ensuring good performance</a></span></dt><dt><span class="section"><a href="#ensuring-reliability">Ensuring reliability</a></span></dt><dd><dl><dt><span class="section"><a href="#checking-for-corruption">Checking the repository for corruption</a></span></dt><dt><span class="section"><a href="#recovering-lost-changes">Recovering lost changes</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#sharing-development">4. Sharing development with others</a></span></dt><dd><dl><dt><span class="section"><a href="#getting-updates-With-git-pull">Getting updates with git pull</a></span></dt><dt><span class="section"><a href="#submitting-patches">Submitting patches to a project</a></span></dt><dt><span class="section"><a href="#importing-patches">Importing patches to a project</a></span></dt><dt><span class="section"><a href="#public-repositories">Public git repositories</a></span></dt><dd><dl><dt><span class="section"><a href="#setting-up-a-public-repository">Setting up a public repository</a></span></dt><dt><span class="section"><a href="#exporting-via-git">Exporting a git repository via the git protocol</a></span></dt><dt><span class="section"><a href="#exporting-via-http">Exporting a git repository via http</a></span></dt><dt><span class="section"><a href="#pushing-changes-to-a-public-repository">Pushing changes to a public repository</a></span></dt><dt><span class="section"><a href="#forcing-push">What to do when a push fails</a></span></dt><dt><span class="section"><a href="#setting-up-a-shared-repository">Setting up a shared repository</a></span></dt><dt><span class="section"><a href="#setting-up-gitweb">Allowing web browsing of a repository</a></span></dt></dl></dd><dt><span class="section"><a href="#sharing-development-examples">Examples</a></span></dt><dd><dl><dt><span class="section"><a href="#maintaining-topic-branches">Maintaining topic branches for a Linux subsystem maintainer</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="#cleaning-up-history">5. Rewriting history and maintaining patch series</a></span></dt><dd><dl><dt><span class="section"><a href="#patch-series">Creating the perfect patch series</a></span></dt><dt><span class="section"><a href="#using-git-rebase">Keeping a patch series up to date using git rebase</a></span></dt><dt><span class="section"><a href="#rewriting-one-commit">Rewriting a single commit</a></span></dt><dt><span class="section"><a href="#reordering-patch-series">Reordering or selecting from a patch series</a></span></dt><dt><span class="section"><a href="#patch-series-tools">Other tools</a></span></dt><dt><span class="section"><a href="#problems-With-rewriting-history">Problems with rewriting history</a></span></dt><dt><span class="section"><a href="#bisect-merges">Why bisecting merge commits can be harder than bisecting linear history</a></span></dt></dl></dd><dt><span class="chapter"><a href="#advanced-branch-management">6. Advanced branch management</a></span></dt><dd><dl><dt><span class="section"><a href="#fetching-individual-branches">Fetching individual branches</a></span></dt><dt><span class="section"><a href="#fetch-fast-forwards">git fetch and fast-forwards</a></span></dt><dt><span class="section"><a href="#forcing-fetch">Forcing git fetch to do non-fast-forward updates</a></span></dt><dt><span class="section"><a href="#remote-branch-configuration">Configuring remote-tracking branches</a></span></dt></dl></dd><dt><span class="chapter"><a href="#git-concepts">7. Git concepts</a></span></dt><dd><dl><dt><span class="section"><a href="#the-object-database">The Object Database</a></span></dt><dd><dl><dt><span class="section"><a href="#commit-object">Commit Object</a></span></dt><dt><span class="section"><a href="#tree-object">Tree Object</a></span></dt><dt><span class="section"><a href="#blob-object">Blob Object</a></span></dt><dt><span class="section"><a href="#trust">Trust</a></span></dt><dt><span class="section"><a href="#tag-object">Tag Object</a></span></dt><dt><span class="section"><a href="#pack-files">How git stores objects efficiently: pack files</a></span></dt><dt><span class="section"><a href="#dangling-objects">Dangling objects</a></span></dt><dt><span class="section"><a href="#recovering-from-repository-corruption">Recovering from repository corruption</a></span></dt></dl></dd><dt><span class="section"><a href="#the-index">The index</a></span></dt></dl></dd><dt><span class="chapter"><a href="#submodules">8. Submodules</a></span></dt><dd><dl><dt><span class="section"><a href="#_pitfalls_with_submodules">Pitfalls with submodules</a></span></dt></dl></dd><dt><span class="chapter"><a href="#low-level-operations">9. Low-level git operations</a></span></dt><dd><dl><dt><span class="section"><a href="#object-manipulation">Object access and manipulation</a></span></dt><dt><span class="section"><a href="#the-workflow">The Workflow</a></span></dt><dd><dl><dt><span class="section"><a href="#working-directory-to-index">working directory → index</a></span></dt><dt><span class="section"><a href="#index-to-object-database">index → object database</a></span></dt><dt><span class="section"><a href="#object-database-to-index">object database → index</a></span></dt><dt><span class="section"><a href="#index-to-working-directory">index → working directory</a></span></dt><dt><span class="section"><a href="#tying-it-all-together">Tying it all together</a></span></dt></dl></dd><dt><span class="section"><a href="#examining-the-data">Examining the data</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees">Merging multiple trees</a></span></dt><dt><span class="section"><a href="#merging-multiple-trees-2">Merging multiple trees, continued</a></span></dt></dl></dd><dt><span class="chapter"><a href="#hacking-git">10. Hacking git</a></span></dt><dd><dl><dt><span class="section"><a href="#object-details">Object storage format</a></span></dt><dt><span class="section"><a href="#birdview-on-the-source-code">A birds-eye view of Git’s source code</a></span></dt></dl></dd><dt><span class="chapter"><a href="#glossary">11. Git Glossary</a></span></dt><dt><span class="appendix"><a href="#git-quick-start">A. Git Quick Reference</a></span></dt><dd><dl><dt><span class="section"><a href="#quick-creating-a-new-repository">Creating a new repository</a></span></dt><dt><span class="section"><a href="#managing-branches">Managing branches</a></span></dt><dt><span class="section"><a href="#exploring-history">Exploring history</a></span></dt><dt><span class="section"><a href="#making-changes">Making changes</a></span></dt><dt><span class="section"><a href="#merging">Merging</a></span></dt><dt><span class="section"><a href="#sharing-your-changes">Sharing your changes</a></span></dt><dt><span class="section"><a href="#repository-maintenance">Repository maintenance</a></span></dt></dl></dd><dt><span class="appendix"><a href="#todo">B. Notes and todo list for this manual</a></span></dt></dl></div><div class="preface"><div class="titlepage"><div><div><h2 class="title"><a name="id501945"></a></h2></div></div></div><p>Git is a fast distributed revision control system.</p><p>This manual is designed to be readable by someone with basic UNIX  command-line skills, but no previous knowledge of git.</p><p><a class="xref" href="#repositories-and-branches" title="Chapter 1. Repositories and Branches">Chapter 1, <i>Repositories and Branches</i></a> and <a class="xref" href="#exploring-git-history" title="Chapter 2. Exploring git history">Chapter 2, <i>Exploring git history</i></a> explain how  to fetch and study a project using git—read these chapters to learn how  to build and test a particular version of a software project, search for @@ -450,9 +450,11 @@  choosing "Stage Hunk For Commit").</p></div><div class="section" title="Creating good commit messages"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="creating-good-commit-messages"></a>Creating good commit messages</h2></div></div></div><p>Though not required, it’s a good idea to begin the commit message  with a single short (less than 50 character) line summarizing the  change, followed by a blank line and then a more thorough -description. Tools that turn commits into email, for example, use -the first line on the Subject line and the rest of the commit in the -body.</p></div><div class="section" title="Ignoring files"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ignoring-files"></a>Ignoring files</h2></div></div></div><p>A project will often generate files that you do <span class="emphasis"><em>not</em></span> want to track with git. +description. The text up to the first blank line in a commit +message is treated as the commit title, and that title is used +throughout git. For example, <a class="ulink" href="git-format-patch.html" target="_top">git-format-patch(1)</a> turns a +commit into email, and it uses the title on the Subject line and the +rest of the commit in the body.</p></div><div class="section" title="Ignoring files"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="ignoring-files"></a>Ignoring files</h2></div></div></div><p>A project will often generate files that you do <span class="emphasis"><em>not</em></span> want to track with git.  This typically includes files generated by a build process or temporary  backup files made by your editor. Of course, <span class="emphasis"><em>not</em></span> tracking files with git  is just a matter of <span class="emphasis"><em>not</em></span> calling <code class="literal">git add</code> on them. But it quickly becomes 
diff --git a/user-manual.txt b/user-manual.txt index 03d95dc..85651b5 100644 --- a/user-manual.txt +++ b/user-manual.txt 
@@ -1136,9 +1136,12 @@  Though not required, it's a good idea to begin the commit message  with a single short (less than 50 character) line summarizing the  change, followed by a blank line and then a more thorough -description. Tools that turn commits into email, for example, use -the first line on the Subject line and the rest of the commit in the -body. +description. The text up to the first blank line in a commit +message is treated as the commit title, and that title is used +throughout git. For example, linkgit:git-format-patch[1] turns a +commit into email, and it uses the title on the Subject line and the +rest of the commit in the body. +    [[ignoring-files]]  Ignoring files